package leetcode;

/*
541. 反转字符串 II
给定一个字符串 s 和一个整数 k，你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个，则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
提示：
该字符串只包含小写英文字母。
给定字符串的长度和 k 在 [1, 10000] 范围内。
*/

public class problems_541 {
    public static void main(String[] args) {
        System.out.println(new Solution().reverseStr("abcdefg", 2));
    }

    static class Solution {
        public String reverseStr(String s, int k) {
            char[] sChar = s.toCharArray();
            int k2 = k * 2;
            int num = s.length() / k2 + (s.length() % k2 > 0 ? 1 : 0);
            for (int i = 0; i < num; i++) {
                reverse(sChar, k2 * i, k2 * i + k - 1);
            }
            return new String(sChar);
        }

        private void reverse(char[] sChar, int left, int right) {
            if (right >= sChar.length) right = sChar.length - 1;
            while (left < right) {
                char temp = sChar[left];
                sChar[left] = sChar[right];
                sChar[right] = temp;
                left++;
                right--;
            }
        }
    }
}